/*
 * nume: file.h
 * autor: Dan
 * descriere: clasa de tip fisier
 * tabela de modificarei
 *   24 mai 2007 - ~D - prima versiune  
 *   26 mai 2007 - ~D - adaugat metoda merge
 */

#ifndef FILE_H__
#define FILE_H__

#include "file-chunk.h"
#include <cstdio>
#include <vector>
#include <fstream>

using namespace std;


class File
{
public:
    File();
    ~File();
    
    // functie care parcurge vectorul de FileChunk
    // si daca gaseste chunk-uri care se suprapun,
    // sau care sunt una in continuarea alteia,
    // le face merge. Totodata, aceasta functie sorteaza
    // chunk-urile din vector, pentru a fii unul in 
    // continuarea altuia
    void merge();

    // functie care adauga un chunk nou
    // reactualizeaza vectorul de chunk-uri
    void add_chunk(std::vector<uint8_t> buffer);

    
private:
    std::fstream* file_;             // fisierul primit pana acum
    FingerPrint finger_;             // hash-ul (id-ul) fisierului complet
    ClientId owner_;
    
    bool completed_;                 // fisierul e complet?
    std::vector<FileChunk> chunks_;  // vector de parti
};

#endif // FILE_H__
